一個class只有生成新物件的時候,才能訪問其值,
那有沒有不用新建立一個物件就可以直接訪問值的,就像Math的那些常用的常數一樣,
這時就要透過static去處理了,Class static initialization blocks(暫譯:類別的靜態初始化區塊)
這麼說來那些不能用new來建立的objects,就是只有static而沒有constructor,
static意思是靜態,在JavaScipt裡面就是值不會被改變的意思。
在呼叫他的時候,不需要綁定Object,可以透過class做呼叫。
這個一次只能建立一個 static的值,要再建立前宣告static,之後就是用一個變數去乘載一個值。
static property = 100000;
但是這種方法,一次只能對應一個變數與值,如果要兩個以上就需要再次宣告static,所以如果有兩個以上的狀況就會推薦使用{}(block)。
跟建立constructor的時候一樣,可以用this來建立,只是這時的this就是指class的名稱。
如果不想用this也可以直接使用class的名稱,但是比較少人會這樣做。
從零開始建立一個新的class是很難的,但是如果是拿現有的class(或是物件)當基底再去做延伸會容易許多,於是就有了一個語法叫做extends,可以在現有class(或是物件)當基底的情況下建立出一個新的class。
class ChildClass(newClassName) extends ParentClass {
class內容。
}
ParentClass當作基底的class(或是物件),通常是class(或是物件)的名稱,但也可以是當場去宣告一個class作為ParentClass,只是鯊魚不建議這麼做,這會讓code看起來很亂。
ChildClass新建立的class,因為是從ParentClass 延伸出來,所以會有child的稱呼。
跟一般的class一樣,要先宣告class,之後是class的名稱,後面再加上extends,之後才會被當作基底的class(或是物件),剩下的{}block,就是專屬於這個class的內容。
而被選作當基底的class(或是物件),本身必須有constructor,才有資格當作ParentClass。
昨天有提到class模組的內部 必須要由constructor來建立,這點鯊魚要做修正,其實可以透過LeftHandSideExpression就可以建立了。
class people {
property = 200000;
deposit = 200000;
mobileWay = "moto"
realEstate = 0;
}
如果"="等號 右側是一個值,會被成為fields
如果是一個函式,會被稱作methods
而必須要由constructor來建立,則是可以自由設定參數的class。
其實這個應該要放在很前面說的,只是鯊魚比較晚看到就比較晚說了,Public是公開的意思,上面說全部都是屬於Public class fields,也就是說他們都是可以當作原型被繼承至新建立的物件中,相對於Public,有一個內容是不會被繼承的就是Private class features,這個不會被繼承也沒辦法輕易地去訪問他,他的相關事情下面我們慢慢的說。
一般class建立出來的屬性都是可以被訪問的,如果想要建立出來的屬性不被訪問,就必須將其轉為Private(私密的),
Syntax
#屬性名稱
在內部的屬性名稱前面加上一個前綴#就行了,不過特別注意, constructors是無法變成private,所以製作class features的時候不要用constructor。
Private被稱作私人,他的資料是沒辦法輕易地訪問的,但是也不是沒有訪問的方法,必須從class內部去呼叫他,才可以使用被隱藏的內容,也就是Object常出現的getter 和 setter,從class內部去製作一個fuction專門去設置/調用Private內部的值。
看的內容不足,導致鯊魚又誤會了一些東西,希望沒給大家帶來太多的困擾,鯊魚還在學所以還有很多不懂得,可能會搞錯意思,但是鯊魚相信,只要一直往前就會離真理越來越近,不要停下腳步,繼續前進吧。
資料來源